using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

namespace StudentManagement
{
    public class StudentJsonManager
    {
        // JSON序列化配置
        private static readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions
        {
            WriteIndented = true, // 格式化输出的JSON，便于阅读
            Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping // 支持中文等特殊字符
        };
        
        // 1. 序列化学生集合并保存到文件
        public static void SerializeToJson(List<Student> students, string filePath)
        {
            try
            {
                // 序列化学生集合到JSON字符串
                string jsonString = JsonSerializer.Serialize(students, _jsonOptions);
                
                // 确保目录存在
                string directory = Path.GetDirectoryName(filePath);
                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
                
                // 写入文件
                File.WriteAllText(filePath, jsonString);
                Console.WriteLine($"学生集合已成功序列化到文件: {filePath}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"序列化过程中发生错误: {ex.Message}");
            }
        }
        
        // 2. 从文件读取JSON并反序列化为学生集合
        public static List<Student> DeserializeFromJson(string filePath)
        {
            try
            {
                if (!File.Exists(filePath))
                {
                    Console.WriteLine($"文件不存在: {filePath}");
                    return new List<Student>();
                }
                
                // 读取文件内容
                string jsonString = File.ReadAllText(filePath);
                
                // 反序列化为学生集合
                List<Student> students = JsonSerializer.Deserialize<List<Student>>(jsonString);
                
                Console.WriteLine($"成功从文件反序列化学生集合: {filePath}");
                return students ?? new List<Student>();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"反序列化过程中发生错误: {ex.Message}");
                return new List<Student>();
            }
        }
        
        // 辅助方法：显示学生集合
        public static void DisplayStudents(List<Student> students)
        {
            if (students.Count == 0)
            {
                Console.WriteLine("学生集合为空。");
                return;
            }
            
            Console.WriteLine("=== 学生列表 ===");
            foreach (Student student in students)
            {
                Console.WriteLine(student);
            }
            Console.WriteLine("==============");
        }
    }
}